// ts的核心是对值所具有的结构进行类型检测  interfaces
// 接口是对象的状态（属性）和行为（方法）的抽象（描述）

// 接口是一种类型，是一种规范，是一种规则，是一个能力，是一种约束
(() => {
  interface Person {
    readonly id: number,//只读的
    name: string,
    age: number,
    sex?: string//可有可无的
  }

  const person: Person = {
    id: 1,
    name: 'dd',
    age: 18,
    // sex: "女"
  }

  console.log(person)
  // person.id = 100//错误只读
  console.log(person)

  person.sex = '男'


  // 通过接口的方式作为 函数的类型 来使用


  // 定义一个接口用来作为某个函数的类型来使用
  interface ISearchFunc {
    (source: string, subString: string): boolean
  }


  // const searchString = function (source: string, subString: string): boolean {
  //   return source.search(subString) > -1
  // }

  const searchString: ISearchFunc = function (source, subString) {
    return source.search(subString) > -1
  }

  console.log(searchString('sdfsdf', 'sdf'))

})()



